<template>
  <table class="my-table">
    <thead>
      <slot name="header"></slot>
    </thead>
    <tbody>
      <tr v-for="item in data" :key="item.id">
        <td>{{ item.id }}</td>
        <td><img :src="item.picture" /></td>
        <td>{{ item.name }}</td>
        <td>
          <!-- 自己封装的标签组件 -->
          <!-- 
              $event在原生标签里代表事件对象
              $event在组件上代表组件传递过来的数据
             -->
          <!-- 
                v-model其实就是个语法糖
                  他本质上写的就是 :value  和 @input
                  例如你写一个 v-model="item.tag"
                    它就会帮你生成 :value="item.tag" 以及 @input="item.tag = $event"
            -->
          <!-- <my-tag :value="item.tag" @input="item.tag = $event"/> -->
          <!-- 如果以后组件内的某个数据，既要父传子，又要子传父 -->
          <!-- 建议父的子的prop叫value，子传父的事件叫input -->
          <!-- 这样的好处是可以在组件上直接写v-model -->
          <my-tag v-model="item.tag" />

          <!-- 如果对组件要想用v-model，要父传子的prop叫value,子传父的叫input -->
          <!-- 这是默认情况，也就是说可以改 -->
          <!-- 例如我非要让父传子的prop叫name，我非要让子的父的事件叫xx，而且还能要能用v-model -->
        </td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  props: {
    data: {
      type: Array,
      required: true
    }
  }
}
</script>

<style lang="less" scoped>
.my-table {
  width: 100%;
  border-spacing: 0;
  img {
    width: 100px;
    height: 100px;
    object-fit: contain;
    vertical-align: middle;
  }
  th {
    background: #f5f5f5;
    border-bottom: 2px solid #069;
  }
  td {
    border-bottom: 1px dashed #ccc;
  }
  td,
  th {
    text-align: center;
    padding: 10px;
    transition: all 0.5s;
    &.red {
      color: red;
    }
  }
  .none {
    height: 100px;
    line-height: 100px;
    color: #999;
  }
}
</style>
